package com.yhj.servlet.container;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.HashMap;

public class ServerService implements Runnable{

	private Socket s;    				
	private InputStream iis;    		
	private OutputStream oos;
	
	private HashMap<String ,String >Session=null;
	
	public ServerService(Socket s) {
		super();
		this.s = s;//接收外部的套接字，
	}

	@Override
	public void run() {
		try{
			this.iis=this.s.getInputStream();//取到此套接字的输入输出流，
			this.oos=this.s.getOutputStream();
		}catch(IOException e){
			e.printStackTrace();
			return;
		}
		try {
			//创建请求对象
			ServletRequest request=new HttpServletRequest(this.iis);//请求获取输入流iis
			request.parse();//调用request中的解析请求头的方法
			//创建响应对象
			ServletResponse response=new HttpServletResponse(request,this.oos);//响应获取输出流oos，并传入request（已经维护好）
			//定义一个处理器
			Processor processor=null;
			//工厂模式
			if(request.getUri()!=null&&request.getUri().startsWith("/servlet/")){
				processor=new DynamicProcessor();//判断uri是否以/servlet/开头，是的，则表明是动态的请求
			}else{
				processor=new StaticProcessor();//否则实例化静态资源
			}
			//调用处理器的处理方法
			//回调
			processor.process(response, request);
			//http协议是一个无状态的，基于请求响应
			this.s.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
